/*
 * @Author       : Zybz
 * @Date         : 2022-04-20 18:53:25
 * @LastEditors  : Zybz
 * @LastEditTime : 2022-05-03 21:49:01
 * @FilePath     : \dji_driver_v2.0\Core\oslib\utils\utils.h
 * @Description  :
 *
 * Copyright (c) 2022 by BUPT RobotTeam, All Rights Reserved.
 */

#ifndef UTILS_H
#define UTILS_H
#include "stdint.h"
#include "math.h"
#include "oslib.h"
#define Limit(value, max)  \
	if (value > max)       \
		value = max;       \
	else if (value < -max) \
	value = -max

typedef struct
{
	float KP;
	float KD;
	float KI;
	float i;		// 积分量
	float last_err; // 上次微分
	float i_max;	// 积分限幅
	float last_d;	// 上次微分
	float I_TIME;	// 2018年7月9日 修改，增加积分时间，
					//以前是作为宏定义，但不同PID的积分应该是不一样的
} PID_Struct;

typedef struct
{
	uint32_t tick;
	uint32_t delta_tick;
	uint32_t last_tick;
	float s;
} Time_s;

float PID_Release(PID_Struct *PID, float target, float now);
void reset_PID(PID_Struct *s);
void PID_init();

void get_tick(Time_s *time);
void reset_time(Time_s *time);
#endif